/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes.dcanolop;
import futbol.tacticas.Comando;
import futbol.tacticas.ComandoIrA;
import futbol.tacticas.ComandoPase;
import futbol.tacticas.ComandoTiroAPuerta;
import futbol.tacticas.SituacionJugadores;
import java.awt.Point;
import java.util.*;
/**
 *
 * @author Daniel Esteban Cano
 */
public class Jugador {
    public double posXInicial;
    public double posXAtaque;
    public double posXDefensa;
    public double posYInicial;
    public double posYAtaque;
    public double posYDefensa;
    
    public int fuerza;
    public int numero;
    
    public Vector<String> pasarA;
    public int cont;

    public Jugador(){
        posXAtaque=posXDefensa=posXInicial=posYAtaque=posYDefensa=posYInicial=fuerza=numero=cont=0;
    }
    
    public Jugador(double posXInicial, double posYInicial, int fuerza, int numero) {
        this.posXInicial=this.posXAtaque=this.posXDefensa=posXInicial;
        this.posYInicial=this.posYAtaque=this.posYDefensa=posYInicial;
        this.fuerza = fuerza;
        this.numero = numero;
        cont=0;
        pasarA=new Vector<String>();
        pasarA.addElement("0");
        pasarA.addElement("1");
        pasarA.addElement("2");
        pasarA.addElement("3");
        pasarA.addElement("4");
        pasarA.addElement("5");
        pasarA.addElement("6");
        pasarA.addElement("7");
        pasarA.addElement("8");
        pasarA.addElement("9");
        pasarA.addElement("10");
    }

    public double getPosXAtaque() {
        return posXAtaque;
    }

    public void setPosXAtaque(double posXAtaque) {
        this.posXAtaque = posXAtaque;
    }

    public double getPosXDefensa() {
        return posXDefensa;
    }

    public void setPosXDefensa(double posXDefensa) {
        this.posXDefensa = posXDefensa;
    }

    public double getPosXInicial() {
        return posXInicial;
    }

    public void setPosXInicial(double posXInicial) {
        this.posXInicial = posXInicial;
    }

    public double getPosYAtaque() {
        return posYAtaque;
    }

    public void setPosYAtaque(double posYAtaque) {
        this.posYAtaque = posYAtaque;
    }

    public double getPosYDefensa() {
        return posYDefensa;
    }

    public void setPosYDefensa(double posYDefensa) {
        this.posYDefensa = posYDefensa;
    }

    public double getPosYInicial() {
        return posYInicial;
    }

    public void setPosYInicial(double posYInicial) {
        this.posYInicial = posYInicial;
    }
    
    public void setPasarA(int numero){
        pasarA.addElement(String.valueOf(numero));
    }
    
    public int getFuerza() {
        return fuerza;
    }

    public void setFuerza(int fuerza) {
        this.fuerza = fuerza;
    }
    
    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }
    
    //retorna el numero del jugador al cual se le debe pasar el balon
    //-1 se debe disparar al arco
    public int getNumJugadorPase(SituacionJugadores sj){
        Point[] misJugadores = sj.getMisJugadores();
        int numJugador;
        Point posJugador=sj.getMisJugadores()[numero];
        //si estoy cerca del arco
        if(posJugador.getX()>70){
            if(this.fuerza>=5 || posJugador.getX()>misJugadores[9].getX()){
                return -1;
            }/*else if(posJugador.getY()<0){
                return 9;
            }else{
                return 10;
            }*/
        }
        for(int i=0; i<pasarA.size(); i++){
            numJugador=Integer.parseInt(pasarA.elementAt(cont));
            //si el jugador a pasar esta adelante
            if(misJugadores[numJugador].getX()>misJugadores[numero].getX() && numJugador!=numero){
                incrementarCont();
                return numJugador;
            }
            incrementarCont();
        }
        return -1;
    }
    
    public void incrementarCont(){
        cont++;
        if(pasarA.size()<=cont){
            cont=0;
        }
    }

    //es cuando 
    public Vector<Comando> getComandosBusquedaBalon(SituacionJugadores sj, int quienTienePelota){
        Vector<Comando> comandos=new Vector<Comando>();
        Point punto;
        if(quienTienePelota==getNumero()){
            punto=sj.getBola();
            comandos.addElement(new ComandoIrA(getNumero(),punto.getX(), punto.getY()));//va donde el balon y chuta
            int numeroJugador=getNumJugadorPase(sj); //mirar a quien debo pasar
            if(numeroJugador>=0){
                comandos.addElement(new ComandoPase(getNumero(), numeroJugador));    
            }else{
                comandos.addElement(new ComandoTiroAPuerta(getNumero(), 10));
            }
        }else{
            //confirmo mi posicion, si no es la indicada me dirijo a esta
            punto=sj.getMisJugadores()[numero];
            if(posXAtaque!=punto.getX() || posYAtaque!=punto.getY()){
                comandos.addElement(new ComandoIrA(getNumero(), posXAtaque, posYAtaque));
            }
        }
        return comandos;
    }
    
    public Vector<Comando> getComandosDefensa(SituacionJugadores sj, int quienTienePelota){
        Vector<Comando> comandos=new Vector<Comando>();
        Point punto;
        if(quienTienePelota==getNumero()){
            punto=sj.getBola();
            comandos.addElement(new ComandoIrA(getNumero(),punto.getX(), punto.getY()));//va donde el balon y chuta
            int numeroJugador=getNumJugadorPase(sj); //mirar a quien debo pasar
            if(numeroJugador>=0){
                comandos.addElement(new ComandoPase(getNumero(), numeroJugador));    
            }else{
                comandos.addElement(new ComandoTiroAPuerta(getNumero(), 10));
            }
        }else{
            //confirmo mi posicion, si no es la indicada me dirijo a esta
            punto=sj.getMisJugadores()[numero];
            if(posXDefensa!=punto.getX() || posYDefensa!=punto.getY()){
                comandos.addElement(new ComandoIrA(getNumero(), posXDefensa, posYDefensa));
            }
        }
        return comandos;
    }
    
    public Vector<Comando> getComandosAtaque(SituacionJugadores sj, int quienTienePelota){
        Vector<Comando> comandos=new Vector<Comando>();
        Point punto;
        if(quienTienePelota==getNumero()){
            punto=sj.getBola();
            int numeroJugador=getNumJugadorPase(sj); //mirar a quien debo pasar
            if(numeroJugador>=0){
                comandos.addElement(new ComandoPase(getNumero(), numeroJugador));    
            }else{
                comandos.addElement(new ComandoTiroAPuerta(getNumero(), 10));
            }
        }else{
            //confirmo mi posicion, si no es la indicada me dirijo a esta
            punto=sj.getMisJugadores()[numero];
            if(posXAtaque!=punto.getX() || posYAtaque!=punto.getY()){
                comandos.addElement(new ComandoIrA(getNumero(), posXAtaque, posYAtaque));
            }
        }
        return comandos;
    }
    
    public Vector<Comando> getComandos(SituacionJugadores sj, int EstadoEquipo, int quienTienePelota) {
        if(EstadoEquipo==0){
            return getComandosDefensa(sj, quienTienePelota);
        }else if(EstadoEquipo==1){
            return getComandosAtaque(sj, quienTienePelota);
        }else{
            return getComandosBusquedaBalon(sj, quienTienePelota);
        }
    }
}
